package com.springCloud.main;

/**
 * @ClassName SingletonTest
 * @Author 1628994918qq.com
 * @Date 2023/3/30 21:37
 *
 * 实现一个单例模式
 *
 */
public class SingletonTest {
    /**
     * 懒汉式单例模式
     * 懒汉式会存在线程安全问题，如果多线程情况下调用getInstance()，可能会创建多个实例。
     * 解决问题：使用volatile定义变量  再执行getInstance()方法时添加synchronized关键字
     */
   /* private static volatile SingletonTest instance;

    private SingletonTest(){
        System.out.println("懒汉式单例模式 = " + "懒汉式单例模式");
    }

    public static SingletonTest getInstance(){
        if (instance == null){
            synchronized (SingletonTest.class){
                if (instance == null) {
                    instance = new SingletonTest();
                }
            }
        }
        return instance;
    }*/

    /**
     * 饿汉式单例模式
     * 饿汉式不存在线程安全问题
     * @param args
     */
    private static SingletonTest instance = new SingletonTest();

    private SingletonTest(){
        //构造方法私有化防止外部直接私有化
        System.out.println("\"饿汉式单例模式\" = " + "饿汉式单例模式");
    }

    public static SingletonTest getInstance(){
        return instance;
    }

    public static void main(String[] args) {
        //ingletonTest singletonTest = new SingletonTest();
        getInstance();
    }

}
